<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Gtkmm</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Gtkmm"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Gtkmm rootpage-Gtkmm skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">gtkmm</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="float-right infobox toccolours toptextcells" style="border-spacing:5px; font-size:90%; text-align:left; width:21em;">
<tbody><tr>
<th colspan="2" class="hintergrundfarbe6" style="font-size:105%; text-align:center;">gtkmm
<p class="mw-empty-elt">
</p>
</th></tr>
<tr>
<td colspan="2" class="notheme" style="text-align:center; background-color:#f8f9fa;"><span typeof="mw:File"></span>
</td></tr>
<tr>
<th colspan="2" class="hintergrundfarbe5" style="font-size:105%; text-align:center;">Basisdaten
<p class="mw-empty-elt">
</p>
</th></tr>
<tr>
<td><b><a href="Softwareentwickler" title="Softwareentwickler">Entwickler</a></b>
</td>
<td>Murray Cumming, Daniel Elstner
</td></tr>
<tr>
<td><b>Aktuelle <a href="Version_(Software)" title="Version (Software)">Version</a></b>
</td>
<td>3.22.1 (23. Juni 2017<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>)<br>
<p>2.24.5 (4. September 2016<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>)
</p>
</td></tr>
<tr>
<td><b><a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a></b>
</td>
<td><a href="Unix" title="Unix">Unix</a>, <a href="Linux" title="Linux">Linux</a>, <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>
</td></tr>
<tr>
<td><b><a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a></b>
</td>
<td><a href="C%2B%2B" title="C++">C++</a>
</td></tr>
<tr>
<td><b>Kategorie</b>
</td>
<td><a href="GUI-Toolkit" title="GUI-Toolkit">GUI-Toolkit</a>
</td></tr>
<tr>
<td><b>Lizenz</b>
</td>
<td><a href="GNU_Lesser_General_Public_License" title="GNU Lesser General Public License">LGPL</a> (<a href="Freie_Software" title="Freie Software">Freie Software</a>)
</td></tr>
<tr>
<td><b><a href="Lokalisierung_(Softwareentwicklung)" title="Lokalisierung (Softwareentwicklung)">deutschsprachig</a></b>
</td>
<td>ja
</td></tr>
<tr>
<td class="hintergrundfarbe5" colspan="2" style="text-align:center;"><a rel="nofollow" class="external text" href="http://gtkmm.org/">gtkmm.org</a>
</td></tr></tbody></table>
<p><i><b>gtkmm</b></i> ist die <a href="C%2B%2B" title="C++">C++</a>-Schnittstelle für das <a href="Freie_Software" title="Freie Software">freie</a> <a href="GUI-Toolkit" title="GUI-Toolkit">GUI-Toolkit</a> <a href="GTK_(Programmbibliothek)" title="GTK (Programmbibliothek)">GTK</a>. Die Bezeichnung <i>gtkmm</i> steht für <i>gtk-- (gtk minus minus),</i> den ursprünglichen Namen des Projektes.
</p><p>Die <i>gtkmm</i>-Bibliothek steht unter der <a href="Freie_Software" title="Freie Software">freien</a> Lizenz <a href="GNU_Lesser_General_Public_License" title="GNU Lesser General Public License">LGPL</a> und ist dadurch eine kostenlose Lösung auch für grafische <a href="Closed_Source" class="mw-redirect" title="Closed Source">Closed-Source</a>-Programme unter Linux und Unix.
</p>
<div class="mw-heading mw-heading2"><h2 id="Änderungen_gegenüber_Gtk"><span id=".C3.84nderungen_gegen.C3.BCber_Gtk"></span>Änderungen gegenüber Gtk</h2></div>
<p>Die Bibliothek <a href="Datenkapselung_(Programmierung)" title="Datenkapselung (Programmierung)">kapselt</a> unter anderem das <a href="GObject" title="GObject">GObject</a>-System in eine funktionsgleiche C++-<a href="Vererbung_(Programmierung)" title="Vererbung (Programmierung)">Klassenhierarchie</a>. In der C++-Variante der <a href="GLib" title="GLib">GLib</a>, <i>glibmm,</i> werden die Funktionen und Strukturen weitgehend durch Äquivalente aus der <a href="C%2B%2B-Standardbibliothek" title="C++-Standardbibliothek">C++-Standardbibliothek</a> ersetzt.
</p><p><a href="Typsicher" class="mw-redirect" title="Typsicher">Typsichere</a> <a href="R%C3%BCckruffunktion" title="Rückruffunktion">Rückruffunktionen</a> (<a href="Signal-Slot-Konzept" title="Signal-Slot-Konzept">Signal-Slot-Konzept</a>) realisiert <i>gtkmm</i> über die Bibliothek <i><a href="Libsigc%2B%2B" title="Libsigc++">libsigc++</a>.</i>
</p>
<div class="mw-heading mw-heading2"><h2 id="Programmierbeispiel">Programmierbeispiel</h2></div>
<p>Das folgende Beispiel erzeugt ein Fenster mit einem <a href="Label_(Steuerelement)" title="Label (Steuerelement)">Beschriftungsfeld</a> (<i>Label</i>) und einer <a href="Schaltfl%C3%A4che" title="Schaltfläche">Schaltfläche</a> (<i>Button</i>). Letzteres wird mithilfe der <a href="Libsigc%2B%2B" title="Libsigc++">libsigc++</a> mit der <i>quit</i>-<a href="R%C3%BCckruffunktion" title="Rückruffunktion">Funktion</a> verbunden, so dass das Programm bei einem Klick auf den Button beendet wird. Die beiden <a href="Widget" title="Widget">Widgets</a> werden anschließend in einem Gtk-typischen Container – einer vertikalen Box – untergebracht. Diese Box wird im Fenster schließlich angezeigt.
</p>
<div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtkmm.h></span>
<span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">Gtk</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">argv</span><span class="p">[])</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Main</span><span class="w"> </span><span class="n">kit</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="n">argv</span><span class="p">);</span>
<span class="w"> </span><span class="n">Window</span><span class="w"> </span><span class="n">window</span><span class="p">;</span>
<span class="w"> </span><span class="n">window</span><span class="p">.</span><span class="n">set_title</span><span class="p">(</span><span class="s">"Beispiel"</span><span class="p">);</span>
<span class="w"> </span><span class="n">window</span><span class="p">.</span><span class="n">set_border_width</span><span class="p">(</span><span class="mi">15</span><span class="p">);</span>
<span class="w"> </span><span class="n">Label</span><span class="w"> </span><span class="n">hello</span><span class="p">(</span><span class="s">"Hallo Welt!"</span><span class="p">);</span>
<span class="w"> </span><span class="n">Button</span><span class="w"> </span><span class="n">quit_button</span><span class="p">(</span><span class="n">Stock</span><span class="o">::</span><span class="n">QUIT</span><span class="p">);</span>
<span class="w"> </span><span class="n">quit_button</span><span class="p">.</span><span class="n">signal_clicked</span><span class="p">().</span><span class="n">connect</span><span class="p">(</span><span class="n">sigc</span><span class="o">::</span><span class="n">ptr_fun</span><span class="p">(</span><span class="o">&</span><span class="n">Gtk</span><span class="o">::</span><span class="n">Main</span><span class="o">::</span><span class="n">quit</span><span class="p">));</span>
<span class="w"> </span><span class="n">VBox</span><span class="w"> </span><span class="n">box</span><span class="p">(</span><span class="nb">false</span><span class="p">,</span><span class="w"> </span><span class="mi">15</span><span class="p">);</span>
<span class="w"> </span><span class="n">box</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">hello</span><span class="p">);</span>
<span class="w"> </span><span class="n">box</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">quit_button</span><span class="p">);</span>
<span class="w"> </span><span class="n">window</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">box</span><span class="p">);</span>
<span class="w"> </span><span class="n">window</span><span class="p">.</span><span class="n">show_all</span><span class="p">();</span>
<span class="w"> </span><span class="n">Main</span><span class="o">::</span><span class="n">run</span><span class="p">(</span><span class="n">window</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Benutzeroberflächen können mit <i>gtkmm</i> entweder explizit programmiert oder, wie bereits Gtk-Oberflächen, mit Hilfe des Programms <a href="Glade_(Programmierwerkzeug)" title="Glade (Programmierwerkzeug)">Glade</a> erstellt werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Verwendung">Verwendung</h2></div>
<p>In <i>gtkmm</i> geschriebene Programme laufen auf allen <a href="Plattform_(Computer)" title="Plattform (Computer)">Plattformen</a>, auf denen auch Gtk läuft (unter anderem <a href="MacOS" title="MacOS">macOS</a> und <a href="Windows" class="mw-redirect" title="Windows">Windows</a>), wobei das Toolkit nicht primär zur <a href="Plattform%C3%BCbergreifend" class="mw-redirect" title="Plattformübergreifend">Cross-Platform</a>-Entwicklung gedacht ist, sondern im Bereich der <a href="Unix" title="Unix">Unix</a>-Derivate (wie <a href="Linux" title="Linux">Linux</a>) beheimatet ist.
</p><p>Aktuell wird gtkmm 4 entwickelt basierend auf GTK 4.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p><p>Eine populäre Anwendung, die gtkmm benutzt, ist <a href="Inkscape" title="Inkscape">Inkscape</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Alternativen">Alternativen</h2></div>
<p>Der Funktionsumfang der <i>gtkmm</i>-Bibliothek ist in etwa vergleichbar mit dem der etwas bekannteren Bibliothek <a href="Qt_(Bibliothek)" title="Qt (Bibliothek)">Qt</a>. Anders als Qt enthält sie allerdings keine Funktionen, die über die GUI-Programmierung hinausgehen.
</p><p>Vergleichbare in C++ geschriebene Grafikbibliotheken sind ferner, mit ähnlichem Funktionsumfang, <a href="WxWidgets" title="WxWidgets">wxWidgets</a>. <a href="Fast_Light_Toolkit" title="Fast Light Toolkit">FLTK</a> ist im Umfang erheblich geringer.
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Liste_von_GUI-Bibliotheken" title="Liste von GUI-Bibliotheken">Liste von GUI-Bibliotheken</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.gtkmm.org/de/index.html">gtkmm-Projekthomepage</a>
<ul><li><a rel="nofollow" class="external text" href="http://gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/">Offizielles Tutorial</a> (deutsch und englisch gemischt)</li></ul></li>
<li><a rel="nofollow" class="external text" href="http://www.tu-chemnitz.de/informatik/friz/Grundl-Inf/GTKmm_Tutorial/">Tutorial</a> (auch offline-Version vorhanden)</li>
<li><a rel="nofollow" class="external text" href="http://magazin.c-plusplus.de/artikel/GTKmm%20Tutorial%20Teil%201">Deutsches GTKmm-Tutorial in vier Teilen</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://mail.gnome.org/archives/commits-list/2017-June/msg06359.html">mail.gnome.org</a></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://mail.gnome.org/archives/gnome-announce-list/2016-September/msg00003.html">mail.gnome.org</a></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://mail.gnome.org/archives/gnome-announce-list/2017-May/msg00023.html">mail.gnome.org</a></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-04-26" href="https://de.wikipedia.org/wiki/?title=Gtkmm&oldid=233197570">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>